/**
 * TDS PEC 4
 * Grupo 3H2M
 *
 * El paquete <code>edu.uoc.tds.pec4.server.bbdd</code> agrupa todos los
 * interfaces y clases que encapsulan los objetos de acceso a datos (DAO),para
 * realizar el acceso a datos. La base de datos es PostgreSQL.
 */
package edu.uoc.tds.pec4.server.bbdd;

import edu.uoc.tds.pec4.beans.AulaDTO;
import edu.uoc.tds.pec4.beans.CFisicaDTO;
import edu.uoc.tds.pec4.server.bbdd.exceptions.DataBaseDAOException;
import java.util.List;

/** 
 * El interfaz <code>IAulaDAO</code> es el componente de software que suministra
 * una interfaz común entre la aplicación y la base de datos, relacionada con los
 * servicios del subsistema Aulas.<br />
 * Extiende la clase <code>DataBaseDAO</code><br />
 * Es el interfaz común que todas las implementaciones de IAulaDAO deben cumplir.<br />
 *
 * @author	Luis Rodríguez-Manzaneque Sánchez
 * @version	24/11/2011
 * @since	1.00
 * @see         edu.uoc.tds.pec4.server.bbdd.exceptions.DataBaseDAOException
 */
public interface IAulaDAO {

    /**
     * Realiza el alta de un aula en la base de datos.
     * @param aula El aula a dar de alta en la base de datos
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     * @return idAula El identificador del aula dada de alta
     */
    public int altaAula(AulaDTO aula) throws DataBaseDAOException;

    /**
     * Realiza la baja lógica de un aula en la base de datos.
     * @param aula El aula a dar de baja lógica
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void bajaAula(int idAula) throws DataBaseDAOException;

    /**
     * Realiza la consulta de un aula en la base de datos.
     * @param idAula El identificador del aula a consultar en la base de datos
     * @return aula El aula consultada en la base de datos
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public AulaDTO consultaAula(int idAula) throws DataBaseDAOException;

    /**
     * Realiza la consulta de los datos de un aula en la base de datos a partir de su nombre
     * @param nombre El nombre del aula a consultar
     * @throws RemoteException
     * @throws GestorMantenimientoException
     */
    public AulaDTO consultaAulaNombre(String nombre) throws DataBaseDAOException;

    /**
     * Realiza la modificación de un aula en la base de datos.
     * @param aula El aula a modificar en la base de datos
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void modificaAula(AulaDTO aula) throws DataBaseDAOException;

    /**
     * Obtiene la lista de características físicas existentes en la base de datos
     * @return cFisicas La lista de las características físicas existentes en la
     *         base de datos
     * @throws DataBaseDAOException
     */
    public List<CFisicaDTO> cFisicasAula() throws DataBaseDAOException;

    /*    
     * Realiza la asignación de una lista de características físicas a un aula
     * @param listaCFisicas es la lista de características físicas a asignar
     * @param idAula El identificador del aula 
     * @throws DataBaseDAOException
     */
    public void cFisicaToAula(List<CFisicaDTO> listaCFisicas, int idAula) throws DataBaseDAOException;
    
    /**
     * Obtiene la lista de características físicas del aula
     * @param idAula El identificador del aula
     * @return lcFisicas La lista de las características físicas existentes en el aula
     */
    public List<CFisicaDTO> cFisicasFromAula(int idAula) throws DataBaseDAOException; 

    /**
     * Realiza la activación de un aula que estaba en baja lógica
     * @param idAula El identificador del aula a activar
     * @throws RemoteException
     * @throws GestorMantenimientoException 
     */
    public void activaAula(int idAula)throws DataBaseDAOException;
}